package y2015.day_15.输入输出流02;

import org.junit.jupiter.api.Test;

import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Arrays;


/**
 * 字符流
 */
public class FileChar {
    @Test
    public void main() throws Exception {
        input();
        output();
    }

    private static void output() {
        String mytxt = "    虽然java在程序结束时自动关闭所有打开的流，但是当程序使用完流后， 显式地关闭任何打开的流仍是一个良好的习惯。一个被打开的流可能会用尽系统资源，这取决于平台和实现。如果没有关闭被打开的流，那么可能不允许另一个程序操作这些流所用的资源。关闭输出流的另一个原因是把该流缓冲区的内容冲洗掉（通常冲洗到磁盘文件上）。正如将要学到的，在操作系统把程序写到输出流上的那些字节保存到磁盘之前，有时会存放在内存缓冲区中，通过调用close（）方法可以保证操作系统把流缓冲区的内容写到它的目的地。";
        File file = new File("C:\\Documents and Settings\\tarena\\桌面", "ping.txt");
        FileWriter fio = null;
        try {
            file.createNewFile();
            fio = new FileWriter(file);// 创建输出实例
            char mytext[] = mytxt.toCharArray();//转成字符数组，汉字占用两个字节，一个字符
            System.out.println(Arrays.toString(mytext));
            fio.write(mytext);//开始写入
            fio.close();//写入完毕，关闭流
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static void input() {
        File file = new File("C:\\Documents and Settings\\tarena\\桌面", "ping.txt");
        FileReader fio = null;
        try {
            char[] mytxt = new char[(int) file.length()];//返回由此抽象路径名表示的文件的长度。long型
            fio = new FileReader(file);//实例化
            fio.read(mytxt);
            System.out.println(mytxt);

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                fio.close();
            } catch (IOException e) {

                e.printStackTrace();
            }
        }
    }
}

